package com.itheima.controller;

import com.itheima.common.utils.AliOssUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Set;

@Component
@Slf4j
/**
 * 清理任务类，用于定期清理未使用的图片
 */
public class CleanupTask {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @Autowired
    private AliOssUtil aliOssUtil;

    /**
     * 定期清理垃圾图片的任务方法
     * 该方法会从Redis中获取已上传但未使用的图片，并删除这些图片
     */
    @Scheduled(fixedRate = 600000) // 每小时执行一次
    public void cleanupGarbageImages() {
        // 获取已上传的图片集合
        Set<String> uploadedImages = redisTemplate.opsForSet().members("uploaded_images");
        // 获取已使用的图片集合
        Set<String> usedImages = redisTemplate.opsForSet().members("used_images");

        // 确保两个集合都不为空，以避免空指针异常
        if (uploadedImages != null && usedImages != null) {
            // 从已上传的图片集合中移除所有已使用的图片，留下未使用的图片（即垃圾图片）
            uploadedImages.removeAll(usedImages);
            // 遍历垃圾图片集合，删除这些图片
            for (String garbageImage : uploadedImages) {
                aliOssUtil.delete(garbageImage);
                // 从Redis中移除已删除的图片记录
                redisTemplate.opsForSet().remove("uploaded_images", garbageImage);
                // 记录日志，确认图片删除成功
                log.info("删除垃圾图片：" + garbageImage);
            }
        }
    }
}
